package com.tron.dobest.java.trongenericity;

import lombok.Data;

import java.lang.reflect.Array;
import java.util.ArrayList;

@Data
public class TronGenericityClass<T, V> {
    private T one;
    private V two;

    TronGenericityClass(T t, V v) {
        this.one = t;
        this.two = v;
    }

    public <K> Object newInstance(K k) {
        return k;
    }

    /**
     * 定义类型参数
     * @param list
     * @param <X>
     * @return
     */
    public <X extends T> int test01(ArrayList<X> list) {
        return 0;
    }

    public <E> int test02(ArrayList<? extends E> list) {
        return 0;
    }

    public int test03(ArrayList<?> list) {
        return 0;
    }

    /**
     * 定义实例化类型参数，不能对list进行添加操作
     * @param list
     * @return
     */
    public int test04(ArrayList<? extends T> list) {
        return 0;
    }

    /**
     * 可以对list进行添加操作
     * @param list
     * @param <F>
     * @return
     */
    public <F> int test05(ArrayList<? super F> list) {
        return 0;
    }
}
